package com.ssy.lingxi.workflow.model.constant;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 绘制流程图时的一些常量
 * @author 万宁
 * @version 2.0.0
 * @date 2021-04-22
 */
public class ModelConstant {

    /**
     * 外部流程的ProcessKey的后缀
     */
    public static final String EXTERNAL_PROCESS_KEY_SUFFIX = "_ext";

    /**
     * 绘制流程图时，允许使用的节点类型
     */
    public static final List<String> AVAILABLE_NODE_TYPES = Stream.of("startEvent", "endEvent", "userTask", "exclusiveGateway", "subProcess").collect(Collectors.toList());

    /**
     * Extensions中定义的流程步骤的Key
     */
    public static final String STEP_PROPERTY_NAME = "step";

    /**
     * Extensions中定义的返回状态的Key
     */
    public static final String STATUS_PROPERTY_NAME = "status";

    /**
     * Extensions中定义的返回状态描述的Key
     */
    public static final String STATUS_DESCRIPTION_PROPERTY_NAME = "desc";

    /**
     * 内部流程在Extensions中指定对应的前端Url的属性名称
     */
    public static final String INTERNAL_PROCESS_URL_PROPERTY_NAME = "url";

    /**
     * 外部流程如果指定了执行步骤的会员角色，要在Extensions中定义的属性名称
     */
    public static final String EXTERNAL_PROCESS_ROLE_TYPE_PROPERTY_NAME = "roletype";

    /**
     * 所有自定义属性名称的集合，如果增加了新的属性，这里也要相应增加
     */
    public static final List<String> PROPERTY_NAME_LIST = Stream.of("step", "status", "desc", "url", "roletype").collect(Collectors.toList());

    /**
     * 流程跳转参数的名称
     */
    public static final String TASK_JUMP_VAR_KEY = "agree";

    /**
     * 没有跳转条件时，agree字段的默认值
     */
    public static final Integer NO_AGREE = -1;

    /**
     * 执行任务时的参数格式
     */
    public static final String TASK_VARIABLE_NAME_FORMAT = "%d:%d";

    /**
     * 将流程类型作为流程参数时的key
     */
    public static final String PROCESS_TYPE_VARIABLE_NAME = "processType";

    /**
     * 前端Web页面客户端标识
     */
    public static final Integer WEB_URL_SOURCE = 1;

    /**
     * 流程在Redis缓存Key的前缀
     */
    public static final String PROCESS_CACHE_KEY = "wf:ext:";

    /**
     * 会员角色在Redis缓存Key的前缀
     */
    public static final String ROLE_CACHE_KEY = "wf:role:";
}
